import Mock from "mockjs";

// extend 延申mock功能, 电话
Mock.Random.extend({
    phone() {
        const phoneQZui = ['187', '151', '138']
        return this.pick(phoneQZui) + Mock.mock(/\d{8}/)
    }
})

// 查询接口数据
const restablist = Mock.mock({
    'datalist|10': [{
        id: '@increment(1)',
        name: '@cname',
        sex: '@integer(0, 1)', // 0 男 ； 1 女
        phone: '@phone',
        email: '@email',
        account: '@name',  // 英文名字
        status: '@boolean',
        profile: '@image( 50x50 , #FF6600, #fff, png, 头像)',
        createTime: '@datetime("yyyy-MM-dd HH:mm:ss")',
        role: '@pick(["总监","组长","经理","主管"])'
    }]
})
Mock.mock(/\/mock\/tables\/list/, 'get', ({ url, type, body }) => {
    console.log(url, type, body);
    /**
     * 知识点：如获取/mock/tables/list?phones=18756254856&pages=1&pageSize=10 中 'phones' 的值 ，使用 new URLSearchParams()
     *          （除此外，vue中还有其他的方法  queryString）
     * **/ 
    // 1.获取？后面的参数
    const query = url.split('?')[1]
    // 2.解析参数
    const queryStr = new URLSearchParams(query)
    const phones = queryStr.get('phones')
    console.log(queryStr, phones);
    if (phones) {
        return {
            code: 200,
            message: 'sucess',
            datalist: restablist.datalist.find(item => item.phone == Number(phones))
        }
    } else {
        return {
            code: 200,
            message: 'sucess',
            ...restablist
        }
    }
})
// 增加接口数据
// 如果是put ｜ post 的请求 参数是放在了body里面
Mock.mock(/\/mock\/tables\/add/, 'post', ({ body }) => {
    const bodys = JSON.parse(body)
    console.log(bodys);
    // 必填字段做校验
    const vailObj = {
        name: '姓名不能为空',
        sex: '性别不能为空', // 0 男 ； 1 女
        phone: '手机号不能为空',
        email: '邮箱不能为空',
        account: '账号不能为空',  // 英文名字
        status: '状态不能为空',
        role: '角色不能为空'
    }
    for (let keys of Object.keys(vailObj)) {
        if (!bodys[keys]) {
            return {
                code: 500,
                message: vailObj[keys]
            }
        }
    }
    const { data } = Mock.mock({  // 补充用户没有填写的部分字段
        "data": {
            id: '@integer(100,999)',
            profile: '@image( 50x50 , #FF6600, #fff, png, 头像)',
            createTime: '@datetime("2023-MM-dd HH:mm:ss")',
        }
    })
    restablist.datalist.push({ ...data, ...bodys })
    console.log('新增后',restablist.datalist);
    return {
        code: 200,
        message: '新增成功'
    }
})
// 删除数据接口
Mock.mock(/\/tables\/delet/, 'post', ({ body }) => {
    console.log(body);
    let getId = JSON.parse(body).id
    // 1.根据id，在数组中找出对应项的位置索引
    let deleIndex = restablist.datalist.findIndex(item => item.id == getId)
    if (deleIndex > -1) {
        // 2. 根据索引值，删除
        restablist.datalist.splice(deleIndex, 1)
        return {
            code: 200,
            message: '删除成功'
        }
    } else {
        return {
            code: 400,
            message: '未查询到对应数据'
        }
    }

})
// 修改接口
Mock.mock(/\/tables\/put/,'post',({ body }) => {
    let pbody = JSON.parse(body)
    // 1.根据id，在数组中找出对应项
    let target = restablist.datalist.find(item => item.id == pbody.id)
    if(target == undefined){
        return {code: 400 , message:'查询有误'}
    }
    // 2.修改对应项数据信息
    for(let key in pbody){
        target[key] = pbody[key]
    }
    // 3.根据id找到在原数据中的位置，并删除原有的，新增当前项
    for(let i in restablist.datalist){
        if(restablist.datalist[i].id == target.id){
            restablist.datalist.splice(i,1,target)
            break;
        }
    }
    console.log('更新后',restablist.datalist);
    return {
        code : 200 ,
        message:'修改成功'
    }
})
